<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <link rel="Stylesheet" type="text/css" href="default.css" />
  <meta http-equiv="Content-Type" content=
  "text/html; charset=utf-8" />

  <title>Использование маркеров</title>
  <style type="text/css">
/*<![CDATA[*/
    div.c2 {text-align: center}
    /*]]>*/
  </style>
</head>

<body>
  <h1>Использование маркеров</h1>

  <p>Для защиты отдельных участков кода, а также для защиты
  строковых констант в текст программы вставляют маркеры, которые
  представляют собой вызов импортируемых процедур, находящихся во
  внешней DLL-библиотеке (для 32-разрядных приложений используется
  VMProtectSDK32.dll, а для 64-разрядных - VMProtectSDK64.dll; для
  защиты драйверов используются VMProtectDDK32.sys и
  VMProtectDDK64.sys соответственно) - далее по тексту
  VMProtectSDK. Процедуры и функции, находящиеся в VMProtectSDK, не
  выполняют каких-либо действий и выступают лишь в роли меток, по
  которым VMProtect определяет границы защищаемого кода. Начало и
  конец защищаемого блока, соответственно, маркируется следующим
  образом:</p>

  <ul>
    <li><strong>Delphi</strong>
      <pre class="code">uses VMProtectSDK;

VMProtectBegin(НАЗВАНИЕ_МАРКЕРА);
...
VMProtectEnd;
</pre>
    </li>

    <li><strong>C/C++</strong>
      <pre class="code">#include "VMProtectSDK.h"

VMProtectBegin(НАЗВАНИЕ_МАРКЕРА);
...
VMProtectEnd();
</pre>
    </li>

    <li><strong>MASM</strong>
      <pre class="code">include VMProtectSDK.inc

invoke VMProtectBegin,SADD(НАЗВАНИЕ_МАРКЕРА)
...
invoke VMProtectEnd
</pre>
    </li>

    <li><strong>Visual Basic</strong>
      <pre class="code">VMProtectBegin (StrPtr(НАЗВАНИЕ_МАРКЕРА))
...
VMProtectEnd
</pre>
    </li>
  </ul>

  <p>Также вместо VMProtectBegin можно использовать маркеры с
  предустановленными <a href=
  "project_functions.htm#CompilationTypes">типами
  компиляции</a>:</p>

  <ul>
    <li>VMProtectBeginVirtualization - маркер будет использовать
    тип компиляции "Виртуализация".</li>

    <li>VMProtectBeginMutation - маркер будет использовать тип
    компиляции "Мутация".</li>

    <li>VMProtectBeginUltra - маркер будет использовать тип
    компиляции "Ультра".</li>
  </ul>

  <p>Обработка маркеров производится следующим образом: при анализе
  кода защищаемого приложения VMProtect находит все вызовы процедур
  и функций VMProtectSDK. Границы защищаемых блоков определяются по
  парам маркеров
  VMProtectBegin/VMProtectBeginVirtualization/VMProtectBeginMutation/VMProtectBeginUltra
  и VMProtectEnd. В процессе обработки проекта с помощью VMProtect
  из кода защищаемой программы удаляются как сами маркеры, так и
  упоминание о библиотеках VMProtectSDK, поэтому нет необходимости
  включать данные библиотеки в дистрибутив программы. Маркеры
  удаляются независимо от того, были они включены в компиляцию или
  нет. При использовании именованных маркеров их имена также
  удаляются.</p>

  <p>Если задано название маркера, ему будет присвоено имя вида
  "VMProtectMarker НАЗВАНИЕ_МАРКЕРА". Если название маркера не
  задано, ему будет присвоено уникальное имя вида
  "VMProtectMarker"+номер маркера по порядку. Однако использование
  неименованных маркеров имеет один серьезный недостаток,
  заключающийся в том, что при вставке в исходный код программы
  нового маркера нумерация неименованных маркеров изменится,
  поэтому при защите программ всегда целесообразно использовать
  именованные маркеры.</p>

  <p>Важным моментом, который необходимо учитывать при работе с
  маркерами, является то, что нельзя допускать переходы из
  незащищенных участков внутрь маркера, что может произойти,
  например, при пометке маркером только части цикла. В случае если
  приложение после защиты с использованием маркеров стало
  неработоспособным, адреса переходов из незащищенных участков
  можно определить с помощью включения опции "Режим отладки". В
  данном режиме, при работе защищенного приложения из-под
  отладчика, на месте обнаружения переходов из незащищенного
  участка кода в защищенный отладчик будет прерывать выполнение
  программы. После обнаружения всех подобных переходов необходимо
  изменить местоположение маркеров в коде программы либо, если это
  невозможно, пометить эти адреса как внешние, используя
  графическую версию VMProtect.</p>

  <br />
  <br />
  <br />
  <br />
  <hr noshade="noshade" size="1" />

  <div align="center">
    © 2006-2015 Copyright VMProtect Software
  </div>
</body>
</html>
